﻿using System;
using System.Collections;
using System.Text;

namespace Petra.Gis.DataServices.SHP
{
  /// <summary>
  /// Feature type enumeration
  /// </summary>
  public enum ShapeGeometryTypes : int
  {

    /// <summary>
    /// Null shape with no geometric data
    /// = pure dbf table
    /// </summary>
    NullShape = 0,

    /// <summary>
    /// A point consists of a pair of double-precision coordinates.
    /// SharpMap interpretes this as <see cref="SharpMap.Geometries.Point"/>
    /// </summary>
    Point = 1,

    ///// <summary>
    ///// PointZ
    ///// </summary>
    //PointZ = 9,

    /// <summary>
    /// 11 - Each shape is a point with a Z value
    /// </summary>
    PointZ = 11,

    /// <summary>
    /// 21 - Each shape has several unconnected points, each of which has an m and z value
    /// </summary>
    PointM = 21,

    /// <summary>
    /// PolyLine is an ordered set of vertices that consists of one or more parts. A part is a
    /// connected sequence of two or more points. Parts may or may not be connected to one
    ///	another. Parts may or may not intersect one another.
    /// SharpMap interpretes this as either <see cref="SharpMap.Geometries.LineString"/> or <see cref="SharpMap.Geometries.MultiLineString"/>
    /// </summary>
    LineString = 3,

    ///// <summary>
    ///// LineStringZ
    ///// </summary>
    //LineStringZ = 10,

    /// <summary>
    /// 13 - Each shape is a linestring with each vertex having a z value
    LineStringZ = 13,

    /// <summary>
    /// 23 - Each shape is made up of several points connected to form a line, each vertex having an m and z value
    /// </summary>
    LineStringM = 23,

    /// <summary>
    /// A polygon consists of one or more rings. A ring is a connected sequence of four or more
    /// points that form a closed, non-self-intersecting loop. A polygon may contain multiple
    /// outer rings. The order of vertices or orientation for a ring indicates which side of the ring
    /// is the interior of the polygon. The neighborhood to the right of an observer walking along
    /// the ring in vertex order is the neighborhood inside the polygon. Vertices of rings defining
    /// holes in polygons are in a counterclockwise direction. Vertices for a single, ringed
    /// polygon are, therefore, always in clockwise order. The rings of a polygon are referred to
    /// as its parts.
    /// </summary>
    Polygon = 5,

    /// <summary>
    /// 15 - Each shape is a closed linestring with each vertex having a z value
    /// </summary>
    /// </summary>
    PolygonZ = 15,

    /// <summary>
    /// 25 - Each shape is a closed linestring with each vertex having a z value and m value
    /// </summary>
    PolygonM = 25,

    /// <summary>
    /// A MultiPoint represents a set of points.
    /// SharpMap interpretes this as <see cref="SharpMap.Geometries.MultiPoint"/>
    /// </summary>
    Multipoint = 8,

    ///// <summary>
    ///// MultiPointZ
    ///// </summary>
    //MultiPointZ = 20,

    /// <summary>
    /// 18 - Each shape has several unconnected points, each of which has a z value
    /// </summary>
    MultiPointZ = 18,

    /// <summary>
    /// 28 - Each shape has several unconnected points, each of which has a z value and m value
    /// </summary>
    MultiPointM = 28,

    /// <summary>
    /// A MultiPatch consists of a number of surface patches. Each surface patch describes a
    /// surface. The surface patches of a MultiPatch are referred to as its parts, and the type of
    /// part controls how the order of vertices of an MultiPatch part is interpreted.
    /// lib doesn't support this feature type.
    /// </summary>
    MultiPatch = 31

  };


}
